package org.javahispano.javacup.tacticas_aceptadas.jcrosas.chuky;


import java.awt.Color;

import org.javahispano.javacup.modelo.*;
import org.javahispano.javacup.tacticas_aceptadas.jcrosas.chuky.entrenador.Entrenador;

import java.util.LinkedList;
import java.util.List;
import java.util.Random;

public class TacticaChuky implements Tactica {
    
	Posicion alineacion1[]=new Posicion[]{
        new Posicion(0.0,-50.0),
        new Posicion(-10.0,-32.0),
        new Posicion(10.0,-32.0),
        new Posicion(-25.0,-18.0),
        new Posicion(25.0,-18.0),
        new Posicion(0.0,-15.0),
        new Posicion(-16.0,3.0),
        new Posicion(16.0,3.0),
        new Posicion(0.0,15.0),
        new Posicion(-22.2,20.0),
        new Posicion(22.2,20.0)
    };

	Posicion alineacion2[]=new Posicion[]{
		new Posicion(0.0,-50.0),
		new Posicion(-9.0,-42.5),
		new Posicion(9.0,-42.5),
		new Posicion(-22.0,-32.0),
		new Posicion(22.0,-32.0),
		new Posicion(0.0,-30.0),
		new Posicion(-15.0,-20.0),
		new Posicion(15.0,-20.0),
		new Posicion(0.0,-9.0),
		new Posicion(-21.0,0.0),
		new Posicion(21.0,0.0)
	};

    Posicion alineacion3[]=new Posicion[]{
		new Posicion(0.0,-50.0),
        new Posicion(-9.0,-42.5),
        new Posicion(9.0,-42.5),
        new Posicion(-22.0,-32.0),
        new Posicion(22.0,-32.0),
        new Posicion(0.0,-30.0),
        new Posicion(-15.0,-20.0),
        new Posicion(15.0,-20.0),
        new Posicion(-4.0,-10.5),
        new Posicion(-0.2,0.0),
        new Posicion(5.0,-5.6)
    };

    Posicion alineacion4[]=new Posicion[]{
		new Posicion(0.0,-50.0),
        new Posicion(-9.0,-42.5),
        new Posicion(9.0,-42.5),
        new Posicion(-22.0,-32.0),
        new Posicion(22.0,-32.0),
        new Posicion(0.0,-30.0),
        new Posicion(-15.0,-20.0),
        new Posicion(15.0,-20.0),
        new Posicion(0.0,-11.0),
        new Posicion(-10.7,-1.2),
        new Posicion(10.7,-1.2)
    };

    class TacticaDetalleImpl implements TacticaDetalle {

    	@Override
        public String getNombre() {
            return "Chuky";
        }

        @Override
        public String getPais() {
            return "España";
        }

        @Override
        public String getEntrenador() {
            return "Joan Crosas";
        }
        
        @Override
        public Color getColorCamiseta() {
            return new Color(238, 116, 21);
        }

        @Override
        public Color getColorPantalon() {
            return new Color(0, 0, 0);
        }

        @Override
        public Color getColorFranja() {
            return new Color(238, 142, 68);
        }

        @Override
        public Color getColorCalcetas() {
            return new Color(238, 142, 68);
        }

        @Override
        public Color getColorPortero() {
            return new Color(179, 179, 91        );
        }

        @Override
        public EstiloUniforme getEstilo() {
            return EstiloUniforme.SIN_ESTILO;
        }

        @Override
        public Color getColorCamiseta2() {
            return new Color(102, 102, 102);
        }

        @Override
        public Color getColorPantalon2() {
            return new Color(51, 51, 51);
        }

        @Override
        public Color getColorFranja2() {
            return new Color(153, 153, 153);
        }

        @Override
        public Color getColorCalcetas2() {
            return new Color(51, 51, 51);
        }

        @Override
        public Color getColorPortero2() {
            return new Color(102, 102, 102        );
        }

        @Override
        public EstiloUniforme getEstilo2() {
            return EstiloUniforme.SIN_ESTILO;
        }

        class JugadorImpl implements JugadorDetalle {

            String nombre;
            int numero;
            Color piel, pelo;
            double velocidad, remate, presicion;
            boolean portero;
            Posicion posicion;

            public JugadorImpl(String nombre, int numero, Color piel, Color pelo,
                    double velocidad, double remate, double presicion, boolean portero) {
                this.nombre=nombre;
                this.numero=numero;
                this.piel=piel;
                this.pelo=pelo;
                this.velocidad=velocidad;
                this.remate=remate;
                this.presicion=presicion;
                this.portero=portero;
            }

            public String getNombre() {
                return nombre;
            }

            public Color getColorPiel() {
                return piel;
            }

            public Color getColorPelo() {
                return pelo;
            }

            public int getNumero() {
                return numero;
            }

            public boolean esPortero() {
                return portero;
            }

            public double getVelocidad() {
                return velocidad;
            }

            public double getRemate() {
                return remate;
            }

            public double getPresicion() {
                return presicion;
            }

        }

        public JugadorDetalle[] getJugadores() {
            return new JugadorDetalle[]{
                new JugadorImpl("A-16", 1, new Color(235,168,108), new Color(197,46,15),1.0d,0.76d,1.0d, true),
                new JugadorImpl("WOPR", 2, new Color(146,130,130), new Color(50,0,0),1.0d,0.68d,0.95d, false),
                new JugadorImpl("Agente Smith", 3, new Color(255,200,150), new Color(50,0,0),1.0d,0.68d,0.95d, false),
                new JugadorImpl("Arale", 4, new Color(235,193,156), new Color(138,57,162),0.8d,0.6d,0.9d, false),
                new JugadorImpl("Numero5", 5, new Color(111,122,156), new Color(111,122,156),0.8d,0.6d,0.9d, false),
                new JugadorImpl("Sonny", 6, new Color(215,217,228), new Color(215,217,228),0.75d,0.55d,0.85d, false),
                new JugadorImpl("C3PO", 7, new Color(217,209,65), new Color(217,209,65),0.75d,0.55d,0.85d, false),
                new JugadorImpl("Bender", 8, new Color(193,193,193), new Color(193,193,193),0.75d,0.55d,0.85d, false),
                new JugadorImpl("Chuky", 9, new Color(235,155,74), new Color(207,59,54),1.0d,0.81d,1.0d, false),
                new JugadorImpl("Terminator", 10, new Color(235,168,108), new Color(136,77,13),1.0d,0.81d,1.0d, false),
                new JugadorImpl("Cylon", 11, new Color(255,200,150), new Color(50,0,0),1.0d,0.81d,1.0d, false)
            };
        }
        
    }

    TacticaDetalle detalle=new TacticaDetalleImpl();
    public TacticaDetalle getDetalle() {
        return detalle;
    }
    
    public Posicion[] getPosicionDefensiva() {
    	return alineacion2;
    }
    
    public Posicion[] getPosicionOfensiva() {
    	return alineacion1;
    }

    public Posicion[] getPosicionSaca( SituacionPartido sp ) {
    	return alineacion3;
    }

    public Posicion[] getPosicionRecive( SituacionPartido sp ) {
    	return alineacion4;
    }

    
    Random rand = new Random();
	LinkedList<Comando> comandos = new LinkedList<Comando>();
	

	Entrenador entrenador;
	
	/*
	 * Constructor
	 */
	public TacticaChuky() {
		entrenador = new Entrenador( this );
	}
	
	
    public List<Comando> ejecutar(SituacionPartido sp) {
    	
    	try {
			comandos.clear();
			entrenador.evaluar( sp );
			comandos = entrenador.getComandos();
				
    	} catch( Throwable e ) {
    		e.printStackTrace();
    	}

		return comandos;
    }
}